package com.example.basic.demos.aop;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class TestInterceptor {

    @Pointcut("@annotation(com.example.basic.demos.annotation.TestAnnotation)")
    private void cut() {
    }


    @Before("cut()")
    private void before() {
        System.out.println("自定义注解前置通知！");
    }

    @Around("cut()")
    private void around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("自定义注解Around方法执行之前");
        joinPoint.proceed();
        System.out.println("自定义注解Around方法执行之后");

    }


    @After("cut()")
    private void after() {
        System.out.println("自定义注解后置通知！");
    }

    /**
     * 输出结果
     * 自定义注解Around方法执行之前
     * 自定义注解前置通知
     *
     * 类方法的输出
     *
     * 自定义注解后置通知！
     * 自定义注解Around方法执行之后
     */
}
